
package Servlets;

import Negocio.UsuarioBL;
import beans.Categoria;
import beans.Controlador;
import beans.Usuario;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;


public class ActualizarUsuario extends HttpServlet {

    UsuarioBL _usuario = new UsuarioBL();
  
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, Exception {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        
        
        try {
            
            HttpSession ses = request.getSession();
            Usuario currentUsuario = (Usuario)ses.getAttribute("Usuario");
            
            String data = request.getParameter("data");
            
            
            Document doc = null;
		
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder;
            docBuilder = docFactory.newDocumentBuilder();
            //root element
            doc = docBuilder.newDocument();
            Element rootElement = doc.createElement("UsuarioBBVA");
            doc.appendChild(rootElement);
            
            String []valores = data.split("▼");
           
            String nombres = valores[0];
            String apellidos = valores[1];
            Date fechanacimiento = Date.valueOf(valores[2]);
            String sexo = valores[3];
            String direccion = valores[4];
            String codigopostar = valores[5];
            String email = valores[6];
            float sueldo = Float.valueOf(valores[7]);
            
            //element Usuario
            Element usuario = doc.createElement("Usuario");
			
            Attr atrIdUsuarioPedido = doc.createAttribute("n_usuario_id");
            atrIdUsuarioPedido.setValue(currentUsuario.getId()+"");
            usuario.setAttributeNode(atrIdUsuarioPedido);
            
            Attr atrNombres = doc.createAttribute("s_usu_nombres");
            atrNombres.setValue(nombres);
            usuario.setAttributeNode(atrNombres);
            
            Attr atrApellidos = doc.createAttribute("s_usu_apellidos");
            atrApellidos.setValue(apellidos);
            usuario.setAttributeNode(atrApellidos);
            
            Attr atrFechaNacimiento = doc.createAttribute("d_usu_fechanacimiento");
            atrFechaNacimiento.setValue(fechanacimiento+"");
            usuario.setAttributeNode(atrFechaNacimiento);
            
            Attr atrSexo = doc.createAttribute("s_usu_sexo");
            atrSexo.setValue(sexo);
            usuario.setAttributeNode(atrSexo);
            
            Attr atrDireccion = doc.createAttribute("s_usu_direccion");
            atrDireccion.setValue(direccion+"");
            usuario.setAttributeNode(atrDireccion);
            
            Attr atrCodigoPostal = doc.createAttribute("s_usu_codpostal");
            atrCodigoPostal.setValue(codigopostar);
            usuario.setAttributeNode(atrCodigoPostal);
            
            Attr atrCorreo = doc.createAttribute("s_usu_correo");
            atrCorreo.setValue(email);
            usuario.setAttributeNode(atrCorreo);
            
            Attr atrSueldo = doc.createAttribute("n_usu_sueldo");
            atrSueldo.setValue(sueldo+"");
            usuario.setAttributeNode(atrSueldo);
            
            rootElement.appendChild(usuario);
            
            Element rootCategorias = doc.createElement("Categorias");
            rootElement.appendChild(rootCategorias);
                        
            //lista de categorias
           
            String[] categoriasData = valores[8].split("♦");
            String[] categoriaData = null;
            	
            Element categoria;		
            for(int i=0; i<categoriasData.length; i++){
                categoriaData = categoriasData[i].split("♠");
                categoria = doc.createElement("Categoria");
                
              				
		Attr atrCodeCategoria = doc.createAttribute("s_categoria_code");
		atrCodeCategoria.setValue(categoriaData[0]);
		categoria.setAttributeNode(atrCodeCategoria);
                
                Attr atrEstadoCategoria = doc.createAttribute("b_cat_estado");
		atrEstadoCategoria.setValue(categoriaData[1]);
		categoria.setAttributeNode(atrEstadoCategoria);
                
                rootCategorias.appendChild(categoria);     
              
            }
            
            // PARSEAR A STRING
            DOMSource domSource = new DOMSource(doc);
            StringWriter writer = new StringWriter();
            StreamResult result = new StreamResult(writer);
            TransformerFactory tf = TransformerFactory.newInstance();
            Transformer transformer = tf.newTransformer();
            transformer.transform(domSource, result);
            
            String cadena = writer.toString();
            String xml = cadena.substring(54); 
            
            int resultado = _usuario.ActualizarUsuarioXML(xml, currentUsuario.getId());
            
            currentUsuario = _usuario.VerificarAcceso(currentUsuario.getCorreo(), currentUsuario.getPassword());
            ses.setAttribute("Usuario", currentUsuario);
            Controlador.GetInstance().getZipCodesCercanosByUsuario(currentUsuario);
            Controlador.GetInstance().getDatosConsumoByZicodeUsuario(currentUsuario);
            
            out.write(resultado+"");
         
        }catch(Exception ex){            
            out.write("0");
        
        } finally {            
            out.close();
        }
    }
     
    


    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (Exception ex) {
            Logger.getLogger(ActualizarUsuario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (Exception ex) {
            Logger.getLogger(ActualizarUsuario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
